package com.gxuwz.com_property.repair.mapper;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxuwz.com_property.repair.dto.RepairDto;
import com.gxuwz.com_property.repair.pojo.Repair;
import com.gxuwz.com_property.user.pojo.User;
import org.apache.ibatis.annotations.*;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Map;

@Mapper
public interface RepairMapper {
    /**
     * 添加
     * */
    Boolean addRepairInfo(Repair repair);
    /**
     * 修改
     * */
    Boolean updateRepairInfo(Repair repair);

    /**
     * 删除
     * */
    @Transactional   //开启事务，在提交时，将事务进行提交
    Boolean delectRepairById(int id);

    /**
     * 根据Id进行查询
     * */
    Repair selectRepairRepair(Repair repair);

    /**
     * 分页查询
     */
    IPage<Repair> selectRepairByPage(Page<Repair> page, @Param("repairDto") RepairDto repairDto);
    /**
     * 查询缴费图表的数据
     * */

    /**
     * sql语句解释：DATE(submit_time) AS date：选择提交时间（submit_time）的日期部分，并将其命名为 date。
     *            COUNT(*) AS count：计算每个日期对应的报修记录数量，并将结果命名为 count。
     *            WHERE submit_time >= DATE_SUB(NOW(), INTERVAL 1 MONTH)：过滤提交时间在最近一个月内的报修记录。NOW() 函数返回当前日期时间，DATE_SUB() 函数将其减去一个月的时间间隔得到最近一个月的起始时间点。
     *            GROUP BY DATE(submit_time)：按照提交时间的日期部分对报修记录进行分组。
     *            ORDER BY DATE(submit_time)：按照提交时间的日期部分对查询结果进行排序。
     * */
    @Select("SELECT DATE(submit_time) AS date, COUNT(*) AS count " +
            "FROM repair " +
            "WHERE submit_time >= DATE_SUB(NOW(), INTERVAL 1 MONTH) " +
            "GROUP BY DATE(submit_time) " +
            "ORDER BY DATE(submit_time)")
    @Results({
            @Result(property = "date", column = "date"),
            @Result(property = "count", column = "count")
    })
    List<Map<String, Object>> RepairChartMangene();
}
